﻿using AutoMapper;
using ERPPublic;
using MediatR;
using Newtonsoft.Json;
using ProductionManagement.Application.Command.StrippingCommand;
using ProductionManagement.Domain.Dtos;
using ProductionManagement.Domain.ProductionDomain;
using ProductionManagement.Dto;
using ProductionManagement.Infrstructre.lnterface;
using SqlSugar;
using static ERPPublic.ParseAPI;

namespace ProductionManagement.Application.CommandHandler.StrippingCommandHandler
{
    public class ListStrippingProductCommandHandler : IRequestHandler<ListStrippingProductCommand, PageDto<ListStrippingProductDto>>
    {
        IStrippingRepository sRep;
        IStripProductRepostory spRep;
        ISqlSugarClient db;
        IMapper mapper;

        public ListStrippingProductCommandHandler(IStrippingRepository sRep,
        IStripProductRepostory spRep, ISqlSugarClient db, IMapper mapper)
        {
            this.sRep = sRep;
            this.spRep = spRep;
            this.db = db;
            this.mapper = mapper;
        }

        public async Task<PageDto<ListStrippingProductDto>> Handle(ListStrippingProductCommand request, CancellationToken cancellationToken)
        {
            List<Products> products = await GetProductList("", "", 1, 1000);
            var stripping = (from s in await sRep.GetAll() select s).ToList();
            var strippingProduct = (from s in await spRep.GetAll() select s).ToList();
            var list = from s in stripping
                       join sp in strippingProduct on s.StripNumber equals sp.StripNumber
                       join p in products on sp.ProductId equals p.ProductId
                       where sp.IsDel==false
                       select new ListStrippingProductDto
                       {
                           StrippingId = s.StrippingId,
                           StripNumber = s.StripNumber,
                           StripDate = s.StripDate,
                           StripDocumentNumber = s.StripDocumentNumber,
                           StripProductId = sp.StripProductId,
                           StripWState = s.StripWState,
                           StripProductNum = sp.StripProductNum,
                           ProductId = sp.ProductId
                       };
            if (!string.IsNullOrEmpty(request.StripNumber))
            {
                list = list.Where(c => c.StripNumber.Contains(request.StripNumber)).ToList();
            }
            if (request.StripStart != null)
            {
                list = list.Where(c => c.StripDate >= request.StripStart).ToList();
            }
            if (request.StripEnd != null)
            {
                list = list.Where(c => c.StripDate < request.StripEnd).ToList();
            }
            if (request.StripWState != 0)
            {
                list = list.Where(c => c.StripWState == request.StripWState).ToList();
            }
            

            PageDto<ListStrippingProductDto> page = new PageDto<ListStrippingProductDto>();
            page.lcount = list.Count();
            page.pcount = (int)Math.Ceiling(page.lcount * 1.0 / request.Psize);
            page.list = list.OrderByDescending(x => x.StrippingId).Skip((request.Pindex - 1) * request.Psize).Take(request.Psize).ToList();
            return page;

        }


        /// <summary>
        /// 显示产品信息
        /// </summary>
        /// <param name="PName"></param>
        /// <param name="PNumber"></param>
        /// <param name="pindex"></param>
        /// <param name="psize"></param>
        /// <returns></returns>
        public async Task<dynamic> GetProductList(string? PName, string? PNumber, int pindex, int psize)
        {
            string token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI1MCIsInNpZCI6IjE4NjcwOTU3MzQ0NjIwNTg0OTYiLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvY2xhaW1zL2dyb3Vwc2lkIjoiMTksMTkiLCJqdGkiOiI1MGYyMWRmZS0yNWQ3LTQ1OTQtOTg1Yi0wZTM2MDhhZjJiNmYiLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoi5LuY5rSb5ZiJIiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvdXJpIjoiLyIsImlzcyI6IlJlbmFvYm8yMDA0IiwiYXVkIjoiV2VpZnV3dTIyMDNBIn0._wh23n1M7asMGST9NyeZj-5rk5ICAiOFv6yDk6e2o7Y";
            HttpClientWrapper cilent = new HttpClientWrapper(token);

            string chanpin = "http://116.205.121.197:8000/erpcp/api/Product/ProductShow?PName=" + PName + "&PNumber=" + PNumber + "&ProductTypeId=" + 0 + "&PageIndex=" + pindex + "&PageSize=" + psize;

            string postReponse = await cilent.GetAsync(chanpin);
            var json = JsonConvert.DeserializeObject<ApiResultList<Products>>(postReponse);
            return json.data.list;
        }

        //产品
        public class Products
        {
            /// <summary>
            /// 产品Id
            /// </summary>
            [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
            public int ProductId { get; set; }
            /// <summary>
            /// 标识
            /// </summary>

            public int? PCharacteristic { get; set; }
            /// <summary>
            /// 产品编号
            /// </summary>
            [SugarColumn(ColumnDataType = "Nvarchar(50)")]//设计长度
            public string? PNumber { get; set; }
            /// <summary>
            /// 产品名称
            /// </summary>
            /// 
            [SugarColumn(ColumnDataType = "Nvarchar(50)")]//设计长度
            public string? PName { get; set; }
            /// <summary>
            /// 规格型号
            /// </summary>
            /// 
            [SugarColumn(ColumnDataType = "Nvarchar(50)")]//设计长度
            public string? PSpec { get; set; }
            /// <summary>
            /// 单位
            /// </summary>
            /// 
            [SugarColumn(ColumnDataType = "Nvarchar(50)")]//设计长度
            public string? PUnit { get; set; }

            /// <summary>
            /// 产品分类ID
            /// </summary>

            public int ProductTypeId { get; set; }




        }


    }
}
